8 CLR 10 U$="[197][197][197][197][197][197][197][197][197][197]":O$="[164][164][164][164][164][164][164][164][164]":I$="INPUT-ROUTINE":B$=" BILDSCHIRM" 101 DATA169,255,133,1,169,3,133,2,160,0,230,1,208,4,230,2,48 102 DATA14,177,1,208,244,200,177,1,208,237,200,177,1,208,232,96 200 PRINT"[147][164][164][164]";O$;O$;O$;O$:PRINT"SYNTAX-LEHRGANG 'MASCHINENSPRACHE' (12) 210 [153]"TOTOTOTOTOTOTO";O$:[153]"3. SUCHROUTINEN " 220 [153]"EIN GLEICHERMASSEN WICHTIGES WIE HAEU- 230 PRINT"FIGES PROBLEM STELLEN DIE SUCHROUTINEN 240 [153]"DAR. WIR LERNEN IN DIESER LEKTION, WIE 250 PRINT"SUCHROUTINEN AUFGEBAUT SIND. 260 [153]"DER VORTEIL VON SUCHROUTINEN, DIE IN 270 PRINT"MASCHINENSPRACHE GESCHRIEBEN SIND, IST 280 [153]"IHRE UM EIN VIELFACHES (CA FAKTOR 1000) 290 PRINT"HOEHERE GESCHWINDIGKEIT. 300 [140]:[129]I[178]0[164]32:[135]X:[151]826[170]I,X:[130] 310 I[178]1:[141]5000:[139]FL[167]200 400 [153]"LOADWIR WERDEN DEN PRINZIPIELLEN AUFBAU VON 410 PRINT"SUCHROUTINEN AN EINER EINFACHEN SUCH- 420 [153]"ROUTINE STUDIEREN. 430 PRINT"WIR WOLLEN DEN BEREICH $0400 BIS $8000 440 [153]"NACH DER BYTEFOLGE '$00-$00-$00' DURCH- 450 PRINT"SUCHEN.WIR SUCHEN ALSO DIE ADRESSE DES- 460 [153]"JENIGEN SPEICHERS, DESSEN INHALT UND 470 PRINT"GLEICHZEITIG AUCH DER INHALT DER BEIDEN 480 [153]"FOLGENDEN SPEICHER GLEICH NULL IST. 490 PRINT"DIESE ADRESSE IST DIE ENDADRESSE DES 500 [153]"GERADE IM RAM STEHENDEN BASICPROGRAMMS. 520 I=2:GOSUB5000:IFFLTHEN200 600 PRINT"[147]WIR BENOETIGEN EINEN ZAEHLER, DER VON 605 [153]"$0400 BIS $8000 ZAEHLEN KANN.DER INHALT 606 PRINT"DES SPEICHERS, DESSEN ADRESSE DIESER 610 [153]"ZAEHLER ANGIBT, WIRD AUF DEN WERT $00 615 PRINT"GEPRUEFT. IST DER INHALT UNGLEICH $00, 620 [153]"SO WIRD DER ZAEHLER UM EINS ERHOEHT.IST 630 PRINT"ER GLEICH $00,SO WERDEN AUCH DIE BEIDEN 640 [153]"FOLGENDEN SPEICHER AUF $00 GEPRUEFT. 650 PRINT"SIND SIE NICHT BEIDE NULL, SO WIRD WEI- 660 [153]"TERGESUCHT, ANDERNFALLS WIRD DIE SUCHE 670 PRINT"ABGEBROCHEN. MAXIMAL SOLL BIS $8000 GE- 680 [153]"SUCHT WERDEN. 720 I=3:GOSUB5000:IFFLTHEN400 800 PRINT"[147]ALS ZAEHLER VERWENDEN WIR DIE SPEICHER 805 [153]"$01/$02. ES MUESSEN 2 SPEICHER SEIN, DA 810 PRINT"DIE ADRESSEN 2 BYTE UMFASSEN. WIR WAEH- 815 [153]"LEN ZEROPAGE-SPEICHER, DA DIESE ERSTENS 820 PRINT"SCHNELLER ANSPRECHBAR SIND UND ZWEITENS 830 [153]"INDIREKT INDIZIERT WERDEN KOENNEN. 930 I=4:GOSUB5000:IFFLTHEN600 1000 PRINT"[147]ZUERST LADEN WIR DIE STARTADRESSE MINUS 1010 [153]"1 IN DIESE BEIDEN SPEICHER.DABEI BEACH- 1020 PRINT"TEN WIR DIE REIHENFOLGE NIEDERWERTIG/ 1030 [153]"HOEHERWERTIG (LOW/HIGH): 1040 PRINT" LDA #$FF 1050 [153]" STA $01 $FF NACH $01 1060 PRINT" LDA #$03 1070 [153]" STA $02 $03 NACH $02 1080 PRINT"DA WIR INDIREKT INDIZIERT ADRESSIEREN 1090 [153]"WOLLEN, LADEN WIR DAS YR MIT $00: 1100 PRINT" LDY #$00 1130 I[178]5:[141]5000:[139]FL[167]800 1200 [153]"LOADWIR BEGINNEN NUN DIE SUCHSCHLEIFE MIT 1210 PRINT"DEM ERHOEHEN DER ADRESSE IN SPEICHER 1220 [153]"$01/$02 UM 1: 1230 PRINT" INC $01 ERHOEHEN DES LOW-BYTES 1240 [153]" OR_BNE $04 = 0 ? 1250 PRINT" [221][157][221] INC $02 ERHOEHEN DES HIGH-BYTES 1260 [153]" (null)CMD(null) BMI $.. = $80 ? 1270 PRINT" [221][157][173][192].... 1275 [153]"WEGEN BNE WIRD $02 NUR BEIM AUFTRETEN 1280 PRINT"EINES UEBERLAUFS UM 1 ERHOEHT. 1290 [153]"MIT BMI SPRINGT MAN BEI ERREICHEN VON 1300 PRINT"$8000 AN EINE STELLE, WO RTS STEHT. 1320 I[178]6:[141]5000:[139]FL[167]1000 1400 [153]"LOADNUN ERFOLGT DIE ABFRAGE, OB DER INHALT 1410 PRINT"DES SPEICHERS, DESSEN ADRESSE IN $01/02 1420 [153]"STEHT, GLEICH NULL IST. FALLS NEIN, ER- 1430 PRINT"FOLGT DER SPRUNG ZU DER STELLE, WO DIE 1440 [153]"ADRESSE IN $01/02 INKREMENTIERT WIRD. 1450 PRINT" LDA ($01),Y BEACHTE: Y=0! 1460 [153]" BNE $.. SPRUNG ZU 'INC $01' 1530 I=7:GOSUB5000:IFFLTHEN1200 1600 PRINT"[147]FALLS JA, GEHTS WEITER MIT DEM NACHFOL- 1610 [153]"GENDEN SPEICHER: 1620 PRINT" INY JETZT: Y=1 1630 [153]" LDA ($01),Y 1640 PRINT" BNE $.. SPRUNG ZU 'LDY #$00' 1650 [153]"FALLS AUCH DIESER NULL IST, WIRD AUCH 1655 PRINT"NOCH DER DRITTE SPEICHER GEPRUEFT: 1660 [153]" INY JETZT: Y=2 1670 PRINT" LDA ($01),Y 1680 [153]" BNE $.. SPRUNG ZU 'LDY #$00' 1690 PRINT"UND FALLS AUCH DER NULL IST,ERFOLGT DER 1700 [153]" RTS RUECKSPRUNG ZU BASIC 1710 I=8:GOSUB5000:IFFLTHEN1400 1800 PRINT"[147]NUN NOCH MAL ALLES ZUSAMMEN: 1805 [153]" LDA #$FF STARTADR = 03FF 1810 PRINT" STA $01 1815 [153]" LDA #$03 1820 PRINT" STA $02 1825 [153]" ORTANTANTANLDY #$00 Y, START = 0 1826 PRINT" [221] 1830 [153]" (null)ORTANTANINC $01 ADR = ADR + 1 1835 PRINT" [221][221][176]_BNE $.. = 0 ? 1840 [153]" (null)(null)(null) INC $02 1845 PRINT" [176][221][221][221]_BMI $.. ENDE ? 1846 [153]" (null)(null)(null)(null) 1850 PRINT" [221][221][221][173][192]LDA ($01),Y Y = 0 1855 [153]" (null)(null)/TAN_BNE $.. = 0 ? 1856 PRINT" [221][221] 1860 [153]" (null)(null) INY Y = 1 1865 PRINT" [221][221] LDA ($01),Y 1870 [153]" (null)-TANTAN_BNE $.. = 0 ? 1875 PRINT" [221][221] INY Y = 2 1880 [153]" (null)(null) LDA ($01),Y 1885 PRINT" [221][173][192][192]_BNE $.. = 0 ? 1900 [153]" /TANTANTANTANRTS ENDE 1910 I=9:GOSUB5000:IFFLTHEN1600 2000 PRINT"[147]NUN EIN KLEINER PROBELAUF! WIR RUFEN 2005 [153]"DIE ROUTINE MIT SYS 826 AUF UND DRUCKEN 2010 PRINT"DANN DIE IN $01/02 STEHENDE ADRESSE DE- 2020 [153]"ZIMAL AUS: ADR = PEEK(1) + 256*PEEK(2). 2040 PRINT"DAMIT SIE EIN GEFUEHL BEKOMMEN, WIE FIX 2050 [153]"DAS GEHT, LASSEN WIR DEN CBM WAEHREND 2055 PRINT"DEM SUCHEN EINEN WEISSEN BALKEN AUF DEN 2060 [153]"BILDSCHIRM SETZEN. 2070 PRINT"SIND SIE BEREIT (J/N) ? 2090 [161]X$:[139]X$[179][177]"J"[167]2090 2100 [129]C[178]0[164]10:[129]W[178]0[164]400[172][180](C):[130]W:[153]"ON CMDCMDCMD";10[171]C:[130]C 2110 [153]"ON WAIT":[158]826:[153]"ONADR =";[194](1)[170]256[172][194](2);" " 2120 [153]"SCHNELL, NICHT WAHR ?! 2130 I=10:GOSUB5000:IFFLTHEN1800 2200 PRINT"[147]EINE ERSTE NUTZANWENDUNG FUER DIESES 2220 [153]"PROGRAMM IST DIE BERECHNUNG DER LAENGE 2230 PRINT"VON BASIC-PROGRAMMEN.EIN BASIC-PROGRAMM 2240 [153]"BEGINNT STETS BEI $0400=1024 UND ENDET 2250 PRINT"MIT EBEN DEM SPEICHER, WO DIE DREI 2260 [153]"NULLEN BEGINNEN. 2270 PRINT"WIR WUERDEN ALSO SCHREIBEN: 2280 [153]" 1. 'SYS 826'":[153]" 2. 'PRINT PEEK(1)+256*PEEK(2)-1024' 2290 PRINT"UND ERHIELTEN ALS ERGEBNIS DIE LAENGE 2295 [153]"DES BASIC-PROGRAMMES IN BYTE. 2310 I=11:GOSUB5000:IFFLTHEN2000 2400 PRINT"[147]AUFGABEN :":PRINTU$ 2410 PRINT"1. BERECHNEN SIE AUF DIESE WEISE DIE 2420 [153]" LAENGE DIESES PROGRAMMS. 2430 PRINT"2. FRE(0) BERUECKSICHTIGT AUCH DEN FUER 2440 [153]" VARIABLEN BENOETIGTEN SPEICHERPLATZ. 2445 PRINT" MIT DIESEM MASCHINENPROGRAMM UND 2450 [153]" FRE(0) KOENNEN SIE DEN FUER VARIABLE 2460 PRINT" BENUTZTEN SPEICHERPLATZ BESTIMMEN. 2470 [153]"3. VERSUCHEN SIE MIT HILFE DER INTERNEN 2480 PRINT" UHR HERAUSZUFINDEN, WIE SCHNELL DAS 2490 [153]" PROGRAMM IST [KBYTE PRO SEKUNDE]. 2510 I=12:GOSUB5000:IFFLTHEN2200 2600 PRINT"[147]4. WARUM WIRD ALS STARTADRESSE $03FF 2610 [153]" UND NICHT $0400 GEWAEHLT ? 2620 PRINT"5. WANN WIRD DER SPEICHER $02 UM 1 ER- 2630 [153]" HOEHT ? 2640 PRINT"6. BEI WELCHER [160]ADRESSE GENAU ERFOLGT 2650 [153]" SPAETESTENS DER ABBRUCH DES SUCHENS? 2660 PRINT"7. WARUM LAESST SICH ALS ZAEHLER[160]NICHT 2670 [153]" EINFACH DAS XR ODER YR VERWENDEN ? 2680 PRINT"8. DIE INNERSTE SCHLEIFE BEGINNT BEI 2690 [153]" 'INC $01', DIE BEIDEN AEUSSEREN BEI 2700 PRINT" 'LDY #$00'. WARUM DAS ? 2710 [153]"- SEITE 13 - <+> ONTOTOTOTOCMDCMDCMDCMDENDEWAIT <-> VON VORNE" 3060 [141]5020:[145]FL[137]0 3070 [153]"LOAD":[128] 5000 [143] UMBLAETTERN 5010 [153]" - SEITE";I;"- <+> WEITER <-> ZURUECK"; 5020 [129]I[178]0[164]11:[161]X$:[130] 5030 [161]X$:[139]X$[178]""[167]5030 5040 [139]X$[178]"+"[167]FL[178]0:[142] 5050 [139]X$[178]"-"[167]FL[178]1:[142] 5060 [137]5030